package com.apobates.forum.toro.tuple;

import org.apache.commons.lang3.tuple.Triple;
import java.util.Collection;
import java.util.Collections;
import java.util.function.Consumer;
import java.util.function.Function;

/**
 * Triple实例集合最终结果处理函数
 * @param <L> 左对象类型
 * @param <M> 中对象类型
 * @param <R> 右对象类型
 * @param <F> 最终结果类型
 * @since 20220827
 * @author xiaofanku@live.cn
 */
public interface TripleManyResultMapperTransfer<L,M,R,F> {
    /**
     * 消费函数/前置处理
     * @return
     */
    Consumer<Collection<Triple<L,M,R>>> getConsumer();

    /**
     * 映射函数/后置转换
     * @return
     */
    Function<Collection<Triple<L,M,R>>, F> getFormater();

    /**
     * 处理单实例结果
     * @param result 实例结果
     * @return
     */
    default F get(Collection<Triple<L,M,R>> result) {
        Collection<Triple<L,M,R>> tmp = Collections.unmodifiableCollection(result);
        getConsumer().accept(tmp);
        return getFormater().apply(tmp);
    }
}
